# 练习 函数文档注释
"""

    局部变量：临时保存数据，函数调用完就回收
    全局变量：外侧，（global）
    注意：
        变量同名问题，局部变量>全局变量
"""
import datetime

lst = ['西游记', '红楼梦', '三国演义', '水浒传']


def show_book(books):
    return [book for book in books if book == '三国演义']  # 列表推导式


print(show_book(lst))

num_lst = [1, 4, 90, 35, 79, 34, 89, 12, 90, 34, 89, 26, 90, 99]


# 删除小于50
def remove_element():
    [num_lst.remove(n) for n in num_lst[::-1] if n < 50]  # 造成遗漏所以反向删除，那样即使下标变化不影响整体结果


print(num_lst)
remove_element()  # 删除小于50
print(num_lst)

print('函数使用练习'.center(50, '-'))

'''
需求：
验证时候登录：is_login
    自定义一个函数is_login:
        参数：username 、password
        函数体：
            判断用户输入的用户名和密码是否正确，如果正确则返回True，否则返回False
    借书：定义一个函数borrow_book
        参数：书名:book_name
        函数体：
            判断是否登录，如何登录则可以借书
            如果没有登录则提示：还未登录不能借书
'''

# 是否登录
is_rem = False


def is_login(username, password, is_remember=False):
    global is_rem  # 使用了全局变量名
    if username == 'admin' and password == '1234':
        is_rem = is_remember
        return True
    else:
        return False


# 借书
def borrow_book(book_name):
    if is_rem or login():
        print("登录成功，成功借阅%s！" % book_name)
    else:
        print("未登录不能借书，请登录!")
        n = 3
        while n > 0:
            if login():
                print("登录成功，您可以借书了！")
            else:
                n -= 1
                print("用户名/密码错误，您还有{}次重试机会！".format(n))


def login():
    name = input("请输入用户名：")
    pwd = input("请输入密码：")
    is_remember = bool(input("是否记住用户名密码（True/False）："))
    # 登录
    return is_login(name, pwd, is_remember)


# 借书
borrow_book('红楼梦！')  # 第一次需要登录，可以is_remember 不输入或者输入True
borrow_book('西游记！')  # 不需要再登录了

'''
全局变量：
    停车费：
        1小时4块钱、计算停车费
        15分钟一块钱
        {车牌:[进入时间，离开时间]}
    def enter():
        # 键盘输入车牌号
        pass
    def go_out():
        # 键盘输入车牌号
        pass
    def car_billing():
        # 计费
        pass
'''
start_time = datetime.datetime.now()
end_time = datetime.datetime.now()

# car_park = [{'陕A1234': [start_time, end_time]}]
car_park = []


def enter():
    """
    进入停车场：开始计费
    :return: NONE
    """
    print("欢迎进入xxx停车场".center(30, '-'))
    car_num = input('键盘输入车牌号：')
    global start_time
    start_time = datetime.datetime.now()
    print(start_time)
    car_info = {car_num: [start_time, end_time]}
    car_park.append(car_info)
    print("{}已经进入停车场".format(car_num))


def go_out():
    """
    出车计费
    :return: 返回计费信息
    """
    print("退出xxx停车场".center(30, '-'))
    car_num = input('键盘输入车牌号：')
    global end_time
    global car_park
    global end_time
    for car in car_park:
        if isinstance(car, dict):  # 可以替换(字典默认和key 比较)：　for car_num in car
            # 字典默认和key 比较
            for key in car.keys():
                if car_num == key:
                    end_time = datetime.datetime.now()
                    car.update({key: [start_time, end_time]})
    print(car_billing(car_num))


def car_billing(car_num):
    spend_time = 0
    for car in car_park:
        if isinstance(car, dict):
            car_time = car.get(car_num)
            print(car_time)
            if isinstance(car_time, list):
                print(car_time[1], car_time[0])
                spend_time = car_time[1] - (car_time[0])

                print("spend_time:", spend_time)
    return '停车时常{}，总车费{}。'.format(spend_time, spend_time / 60 * 4)


enter()
go_out()
